package drawing.demo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.View;

/** 
 * 在 Android 里面， Matrix 由 9 个 float 值构成，是一个 3*3 的矩阵。 
 * cosX,		-sinX,	translateX    
 * sinX,  	cosX,	translateY 
 * 0,			0,          scale 
 * 解释一下，上面的 sinX 和 cosX ，表示旋转角度的 cos 值和 sin 值，注意， 
 * 旋转角度是按顺时针方向计算的。 translateX 和 translateY 表示 x 和 y 的平移量。 
 * scale 是缩放的比例， 1 是不变， 2 是表示缩放 1/2 ， 
 */  

public class MatrixDraw extends View implements Runnable{  

	Bitmap bitmap;  
	Matrix matrix = new Matrix();  
	Paint paint;  
  
	public MatrixDraw(Context context) {
		super(context);
		bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.win7)).getBitmap();  
		paint = new Paint();  
		paint.setAntiAlias(true);  
		new Thread(this).start();  
	}

	public MatrixDraw(Context context, AttributeSet attrs) {
		super(context);
		bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.win7)).getBitmap();  
		paint = new Paint();  
		paint.setAntiAlias(true);  
		new Thread(this).start();  
	}

	public MatrixDraw(Context context, AttributeSet attrs, int defStyle) {
		super(context);
		bitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.win7)).getBitmap();  
		paint = new Paint();  
		paint.setAntiAlias(true);  
		new Thread(this).start();  
	}
  
float m;  
float n;  
@Override  
protected void onDraw(Canvas canvas) {  
      
    /* 
    float cosValue = (float)Math.cos(-Math.PI/m); 
    float sinValue = (float)Math.sin(-Math.PI/m); 
     
    Log.d("matrixdraw", "Math.PI =" + Math.PI); 
    Log.d("matrixdraw", "Math.PI/m =" + Math.PI/m); 
    Log.d("matrixdraw", "Math.cos(-Math.PI/m) =" + (float)Math.cos(-Math.PI/m)); 
    Log.d("matrixdraw", "Math.sin(-Math.PI/m) =" + (float)Math.sin(-Math.PI/m)); 
     
    matrix.setValues(new float[]{ 
            cosValue,-sinValue,100, 
            sinValue,cosValue,100, 
            0, 0, 2 
    });//举例，若缩放值为0.9，代表放大原图的十分之一 
	//super.onDraw(canvas);//当然，如果界面上还有其他元素需要绘制，只需要将这句话写上就行了。  
     
	//Matrix matrix2 = new Matrix(matrix); 
    canvas.drawBitmap(bitmap, matrix, paint); 
	//canvas.drawBitmap(bitmap, matrix2, paint); 
*/        
    n ++;  
    if (n == 60) {  
        n = 0;  
    }  
    matrix.postRotate(n);  
    matrix.postTranslate(n, n);  
    matrix.postScale(1, 1, n, n);  
    canvas.drawBitmap(bitmap, matrix, paint);  
}  

public void run() {  
    while(!Thread.currentThread().isInterrupted()){  
        try {  
            Thread.sleep(100);  
            postInvalidate();  
        } catch (InterruptedException e) {  
            Thread.currentThread().interrupt();  
        }  
    }  
}  

/** 
 *  以左上角为顶点，缩放一半，逆时针旋转30度， 
 *  然后沿x轴和y轴分别平移50个像素， 
 *  代码 里面写的是100，为什么是平移50呢， 
 *  因为缩放了一半。  
 *  大家可以自己设置一下Matrix的值，或者尝试一下两个 
 *  Matrix相乘，得到的值设置进去， 
 *  这样才能对Matrix更加熟练。 
 */  
  
}  
